css: Parse text-shadow values properly
authorBenjamin Otte <otte@redhat.com>
Mon, 9 Jun 2014 23:04:55 +0000 (01:04 +0200)
committerBenjamin Otte <otte@redhat.com>
Mon, 9 Jun 2014 23:07:57 +0000 (01:07 +0200)
We used to accept the same syntax for text-shadow and icon-shadow as
we accept for box-shadow. However, box-shadow does accept a spread and
the inset keyword while the others should not.

gtk/gtkcssshadowsvalue.c
gtk/gtkcssshadowsvalueprivate.h
gtk/gtkcssshadowvalue.c
gtk/gtkcssshadowvalueprivate.h
gtk/gtkcssstylepropertyimpl.c

index 1107b2f35b7ef52e9a1182a61a4f5556df3c1dd6..6aafa92ce4d8db66808a6209881b0a73a3812580 100644 (file)
@@ -213,7 +213,8 @@ gtk_css_shadows_value_new (GtkCssValue **values,
 }
 
 GtkCssValue *
-_gtk_css_shadows_value_parse (GtkCssParser *parser)
+_gtk_css_shadows_value_parse (GtkCssParser *parser,
+                              gboolean      box_shadow_mode)
 {
   GtkCssValue *value, *result;
   GPtrArray *values;
@@ -224,7 +225,7 @@ _gtk_css_shadows_value_parse (GtkCssParser *parser)
   values = g_ptr_array_new ();
 
   do {
-    value = _gtk_css_shadow_value_parse (parser);
+    value = _gtk_css_shadow_value_parse (parser, box_shadow_mode);
 
     if (value == NULL)
       {
index 5f2bdbbcdd927fa0da3b3ac4ddeb443e58c4df91..4713b86a165b6e36a6850a5af8b0939209002b49 100644 (file)
@@ -31,7 +31,8 @@
 G_BEGIN_DECLS
 
 GtkCssValue *   _gtk_css_shadows_value_new_none       (void);
-GtkCssValue *   _gtk_css_shadows_value_parse          (GtkCssParser             *parser);
+GtkCssValue *   _gtk_css_shadows_value_parse          (GtkCssParser             *parser,
+                                                       gboolean                  box_shadow_mode);
 
 gboolean        _gtk_css_shadows_value_is_none        (const GtkCssValue        *shadows);
 
index 6dcd2dd798186284ab3941a3d35def8f5f153cf9..fead494c396c61a648e1eeff69e578e927af0c8f 100644 (file)
@@ -209,7 +209,8 @@ value_is_done_parsing (GtkCssParser *parser)
 }
 
 GtkCssValue *
-_gtk_css_shadow_value_parse (GtkCssParser *parser)
+_gtk_css_shadow_value_parse (GtkCssParser *parser,
+                             gboolean      box_shadow_mode)
 {
   enum {
     HOFFSET,
@@ -223,7 +224,8 @@ _gtk_css_shadow_value_parse (GtkCssParser *parser)
   gboolean inset;
   guint i;
 
-  inset = _gtk_css_parser_try (parser, "inset", TRUE);
+  if (box_shadow_mode)
+    inset = _gtk_css_parser_try (parser, "inset", TRUE);
 
   do
   {
@@ -254,7 +256,7 @@ _gtk_css_shadow_value_parse (GtkCssParser *parser)
         else
           values[RADIUS] = _gtk_css_number_value_new (0.0, GTK_CSS_PX);
                                                         
-        if (_gtk_css_parser_has_number (parser))
+        if (box_shadow_mode && _gtk_css_parser_has_number (parser))
           {
             values[SPREAD] = _gtk_css_number_value_parse (parser,
                                                           GTK_CSS_PARSE_LENGTH
@@ -265,7 +267,7 @@ _gtk_css_shadow_value_parse (GtkCssParser *parser)
         else
           values[SPREAD] = _gtk_css_number_value_new (0.0, GTK_CSS_PX);
       }
-    else if (!inset && _gtk_css_parser_try (parser, "inset", TRUE))
+    else if (!inset && box_shadow_mode && _gtk_css_parser_try (parser, "inset", TRUE))
       {
         if (values[HOFFSET] == NULL)
           goto fail;
index e46b303631814b63f1901ef2692b880049048d9e..1e5eb2269098825f9e850d256f6b2cf59b5d6039 100644 (file)
@@ -32,7 +32,8 @@ G_BEGIN_DECLS
 
 GtkCssValue *   _gtk_css_shadow_value_new_for_transition (GtkCssValue           *target);
 
-GtkCssValue *   _gtk_css_shadow_value_parse           (GtkCssParser             *parser);
+GtkCssValue *   _gtk_css_shadow_value_parse           (GtkCssParser             *parser,
+                                                       gboolean                  box_shadow_mode);
 
 gboolean        _gtk_css_shadow_value_get_inset       (const GtkCssValue        *shadow);
 
index f1acf9a13b2a6b87fb3434159586940062f50283..442c2b42fa9d22e9891b739a6fdbf82152f2fe07 100644 (file)
@@ -582,11 +582,18 @@ bindings_value_assign (GtkCssStyleProperty *property,
   return result;
 }
 
+static GtkCssValue *
+box_shadow_value_parse (GtkCssStyleProperty *property,
+                        GtkCssParser        *parser)
+{
+  return _gtk_css_shadows_value_parse (parser, TRUE);
+}
+
 static GtkCssValue *
 shadow_value_parse (GtkCssStyleProperty *property,
                     GtkCssParser        *parser)
 {
-  return _gtk_css_shadows_value_parse (parser);
+  return _gtk_css_shadows_value_parse (parser, FALSE);
 }
 
 static GtkCssValue *
@@ -1014,7 +1021,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_BOX_SHADOW,
                                           G_TYPE_NONE,
                                           GTK_STYLE_PROPERTY_ANIMATED,
-                                          shadow_value_parse,
+                                          box_shadow_value_parse,
                                           NULL,
                                           NULL,
                                           _gtk_css_shadows_value_new_none ());